const ws = require('nodejs-websocket')
const TYPE_ENTER = 0
const TYPE_LEAVE = 1
const TYPE_MSG = 2
/* 
    分析：
        消息应该室一个对象
            type：表示消息类型 0：用户进入聊天室   1：用户离开聊天室   2：正常的聊天消息
            msg: 消息的内容
            time: 聊天的具体事件
*/
let count = 0
const server = ws.createServer(coon => {
    console.log('新的连接')
    count++
    coon.userName = `用户${count}`
    broadcast({
        type: TYPE_ENTER,
        msg: `${coon.userName}进入了聊天室`,
        time: new Date().toLocaleTimeString() // 22:12
    })
    coon.on('text', data => {
        // 聊天的消息
        broadcast({
            type: TYPE_MSG,
            msg: data,
            time: new Date().toLocaleTimeString() // 22:12
        })
    })
    coon.on('close', data => {
        console.log('关闭连接')
        count--
        broadcast({
            type: TYPE_LEAVE,
            msg: `${coon.userName}离开了聊天室`,
            time: new Date().toLocaleTimeString() // 22:12
        })
     })
    coon.on('error', data => {
        console.log('服务异常')
    })
})

// 广播。给所有用户发消息
// broadcast只能传string
function broadcast(msg) {
    // server.connections表示所有的用户
    server.connections.forEach(item => {
        item.send(JSON.stringify(msg))
    })
}

server.listen(3000, () => {
    console.log('监听端口3000')
})